<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
	<title>Arrays | ElasticSearch 7.7 权威指南中文版</title>
	<meta name="keywords" content="ElasticSearch 权威指南中文版, elasticsearch 7, es7, 实时数据分析，实时数据检索" />
    <meta name="description" content="ElasticSearch 权威指南中文版, elasticsearch 7, es7, 实时数据分析，实时数据检索" />
    <!-- Give IE8 a fighting chance -->
    <!--[if lt IE 9]>
    <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
    <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
	<link rel="stylesheet" type="text/css" href="../static/styles.css" />
	<script>
	var _link = 'array.html';
    </script>
</head>
<body>
<div class="main-container">
    <section id="content">
        <div class="content-wrapper">
            <section id="guide" lang="zh_cn">
                <div class="container">
                    <div class="row">
                        <div class="col-xs-12 col-sm-8 col-md-8 guide-section">
                            <div style="color:gray; word-break: break-all; font-size:12px;">原英文版地址: <a href="https://www.elastic.co/guide/en/elasticsearch/reference/7.7/array.html" rel="nofollow" target="_blank">https://www.elastic.co/guide/en/elasticsearch/reference/7.7/array.html</a>, 原文档版权归 www.elastic.co 所有<br/>本地英文版地址: <a href="../en/array.html" rel="nofollow" target="_blank">../en/array.html</a></div>
                        <!-- start body -->
                  <div class="page_header">
<strong>重要</strong>: 此版本不会发布额外的bug修复或文档更新。最新信息请参考 <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html" rel="nofollow">当前版本文档</a>。
</div>
<div id="content">
<div class="breadcrumbs">
<span class="breadcrumb-link"><a href="index.html">Elasticsearch 权威指南 [7.7]</a></span>
»
<span class="breadcrumb-link"><a href="mapping.html">映射</a></span>
»
<span class="breadcrumb-link"><a href="mapping-types.html">字段数据类型</a></span>
»
<span class="breadcrumb-node">Arrays</span>
</div>
<div class="navheader">
<span class="prev">
<a href="alias.html">« alias(别名)数据类型</a>
</span>
<span class="next">
<a href="binary.html">binary(二进制)数据类型 »</a>
</span>
</div>
<div class="section">
<div class="titlepage"><div><div>
<h2 class="title">
<a id="array"></a>arrays(数组)
</h2>
</div></div></div>
<p>
在Elasticsearch中,没有专用的<code class="literal">array</code>(数组)数据类型。 

默认情况下，任何字段都可以包含零个或多个值，但是数组中的所有值必须具有相同的数据类型。 例如: 
</p>
<div class="ulist itemizedlist">
<ul class="itemizedlist">
<li class="listitem">
一个字符串数组：[ <code class="literal">"one"</code>, <code class="literal">"two"</code> ]
</li>
<li class="listitem">
一个整数数组：[ <code class="literal">1</code>, <code class="literal">2</code> ]
</li>
<li class="listitem">
一个数组的数组：[ <code class="literal">1</code>, [ <code class="literal">2</code>, <code class="literal">3</code> ]]，其等价于 [ <code class="literal">1</code>, <code class="literal">2</code>, <code class="literal">3</code> ]
</li>
<li class="listitem">
一个对象数组：[ <code class="literal">{ "name": "Mary", "age": 12 }</code>, <code class="literal">{ "name": "John", "age": 10 }</code>]
</li>
</ul>
</div>
<div class="note admon">
<div class="icon"></div>
<div class="admon_content">
<h3>对象数组</h3>
<p>
对象数组并不像能你期望的那样工作：不能独立于数组中的其他对象独立查询每个对象。

如果你需要能够这样做,那么应该使用<a class="xref" href="nested.html" title="nested 数据类型" rel="nofollow"><code class="literal">nested</code></a>数据类型而不是<a class="xref" href="object.html" title="object 数据类型" rel="nofollow"><code class="literal">object</code></a>(对象)数据类型。 
</p>
<p>更多详情在<a class="xref" href="nested.html" title="nested 数据类型" rel="nofollow">nested(嵌套)</a>中解释了。</p>
</div>
</div>
<p>
当动态添加字段时，数组中的第一个值决定字段的类型(<code class="literal">type</code>)。 

所有后续的值必须是相同的数据类型，或者至少可以将后续的值<a class="xref" href="coerce.html" title="coerce" rel="nofollow">强制转换</a>为相同的数据类型。
</p>
<p><em>不</em>支持混合类型的数组：[ <code class="literal">10</code>, <code class="literal">"some string"</code> ]</p>
<p>
数组可能包含<code class="literal">null</code>值，这些值要么被配置的<a class="xref" href="null-value.html" title="null_value" rel="nofollow"><code class="literal">null_value</code></a>替换，要么被完全跳过。

空数组<code class="literal">[]</code>被视为缺失字段，即没有值的字段。
</p>
<p>不需要预先配置任何东西就可以在文档中使用数组，它们是开箱即用的：</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">PUT my_index/_doc/1
{
  "message": "some arrays in this document...",
  "tags":  [ "elasticsearch", "wow" ], <a id="CO289-1"></a><i class="conum" data-value="1"></i>
  "lists": [ <a id="CO289-2"></a><i class="conum" data-value="2"></i>
    {
      "name": "prog_list",
      "description": "programming list"
    },
    {
      "name": "cool_list",
      "description": "cool stuff list"
    }
  ]
}

PUT my_index/_doc/2 <a id="CO289-3"></a><i class="conum" data-value="3"></i>
{
  "message": "no arrays in this document...",
  "tags":  "elasticsearch",
  "lists": {
    "name": "prog_list",
    "description": "programming list"
  }
}

GET my_index/_search
{
  "query": {
    "match": {
      "tags": "elasticsearch" <a id="CO289-4"></a><i class="conum" data-value="4"></i>
    }
  }
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/619.console"></div>
<div class="calloutlist">
<table border="0" summary="Callout list">
<tr>
<td align="left" valign="top" width="5%">
<p><a href="#CO289-1"><i class="conum" data-value="1"></i></a></p>
</td>
<td align="left" valign="top">
<p><code class="literal">tags</code>字段是作为一个<code class="literal">string</code>类型的字段动态添加的。</p>
</td>
</tr>
<tr>
<td align="left" valign="top" width="5%">
<p><a href="#CO289-2"><i class="conum" data-value="2"></i></a></p>
</td>
<td align="left" valign="top">
<p><code class="literal">lists</code>字段是作为一个<code class="literal">object</code>类型的字段动态添加的。</p>
</td>
</tr>
<tr>
<td align="left" valign="top" width="5%">
<p><a href="#CO289-3"><i class="conum" data-value="3"></i></a></p>
</td>
<td align="left" valign="top">
<p>第二个文档不包含数组，但是可以索引到相同的字段中。</p>
</td>
</tr>
<tr>
<td align="left" valign="top" width="5%">
<p><a href="#CO289-4"><i class="conum" data-value="4"></i></a></p>
</td>
<td align="left" valign="top">
<p>该查询在字段<code class="literal">tags</code>中查找<code class="literal">elasticsearch</code>，两个文档都能匹配到。</p>
</td>
</tr>
</table>
</div>
<div class="sidebar">
<a id="multi-value-fields-inverted-index"></a>
<div class="titlepage"><div><div>
<p class="title"><strong>多值字段和倒置索引</strong></p>
</div></div></div>
<p>
事实上，所有字段类型都支持开箱即用的多值字段，这是源自Lucene的结果。

Lucene被设计成一个全文搜索引擎。

为了能够在一大块文本中搜索单个单词，Lucene将文本词元化为单个词元，并将每个词元分别添加到倒排索引中。
</p>
<p>
这意味着默认情况下，即使是简单的文本字段也必须能够支持多个值。

当添加其他数据类型（如数字和日期）时，它们使用与字符串相同的数据结构，因此可以免费获得多值。
</p>
</div>
</div>
<div class="navfooter">
<span class="prev">
<a href="alias.html">« alias(别名)数据类型</a>
</span>
<span class="next">
<a href="binary.html">binary(二进制)数据类型 »</a>
</span>
</div>
</div>

                  <!-- end body -->
                        </div>
                        <div class="col-xs-12 col-sm-4 col-md-4" id="right_col">
                        
                        </div>
                    </div>
                </div>
            </section>
        </div>
    </section>
</div>
<script src="../static/cn.js"></script>
</body>
</html>